﻿#ifndef RenderInterface_h__
#define RenderInterface_h__

namespace SkyEngine2d
{
	class RenderCommand;
	class Color;
	class IDirectRender;
	/*!
	 \brief 渲染接口
	 \details
	*/
	class IRender
	{
	public:
		//! 开始渲染
		/*!
		\return void
		*/
		virtual void renderBegin() = 0;

		//! 结束渲染 
		/*!
		\return HRESULT
		*/
		virtual HRESULT renderEnd() = 0;

		//! 渲染 
		/*!
		\return void
		*/
		virtual void render() = 0;

		//! 设置清除目标时的颜色
		/*!
		\param const Color & clear_color 颜色值
		\return void
		*/
		virtual void setClearColor(const Color& clear_color) = 0;

		//! 是否初始化 
		/*!
		\return bool
		*/
		virtual bool isInit()const = 0;

		//! 获取当前帧的DrawCall 次数
		/*!
			DrawCall 是指 在当前帧中 调用 DrawIndexed 次数

		\return int
		*/
		virtual int getDrawCallCount() = 0;

		//! 获取当前帧的绘制命令总数
		/*!
		\return int
		*/
		virtual int getDrawCmdCount() = 0;

		//! 获取当前帧绘制的顶点总数
		/*!
		\return int
		*/
		virtual int getVertexCount() = 0;

		//! 添加渲染命令 
		/*!
		\param RenderCommand* cmd 绘制命令
		\return void
		*/
		virtual void addRenderCommand(RenderCommand* cmd) = 0;

		//! 获取 direct 接口
		/*!
		\return SkyEngine2d::IDirectRender*
		*/
		virtual IDirectRender* getDirectRender() = 0;
	};

}

#endif // RenderInterface_h__
